package org.rency.common.redis.service;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

public interface RedisService<K, V> {

	public V get(K key);
	
	/**
	 * 存储数据(永久存储)
	 * </br>Created on 2016年4月21日
	 * @param key
	 * @param value
	 * @return
	 */
	public boolean set(K key, V value);
	
	/**
	 * 存储数据
	 * </br>Created on 2016年4月21日
	 * @param key
	 * @param value
	 * @param expireTime 过期时间
	 * @return
	 */
	public boolean set(K key, V value, long expireTime);
	
	/**
	 * 移除数据
	 * </br>Created on 2016年4月21日
	 * @param key
	 * @return
	 */
	public V remove(K key);
	
	/**
	 * 移除数据
	 * </br>Created on 2016年4月25日
	 * @param keys
	 * @return
	 */
	public void remove(List<K> keys);
	
	public boolean hasKey(K key);
	
	/**
	 * 获取全部Key
	 * </br>Created on 2016年4月22日
	 * @return
	 */
	public Set<K> keyList();
	
	/**
	 * 设置过期时间
	 * </br>Created on 2016年4月22日
	 * @param key
	 * @param expireTime(秒)
	 * @return
	 */
	public boolean expirtAt(K key, long expireTime);
	
	/**
	 * 设置过期时间
	 * </br>Created on 2016年4月22日
	 * @param key
	 * @param expireTime
	 * @param timeUnit
	 * @return
	 */
	public boolean expirtAt(K key, long expireTime, TimeUnit timeUnit);
	
	/**
	 * 设置过期时间
	 * </br>Created on 2016年4月22日
	 * @param key
	 * @param date
	 * @return
	 */
	public boolean expirtAt(K key, Date date);
	
	/**
	 * 获取过期时间
	 * </br>Created on 2016年4月22日
	 * @param key
	 * @return
	 */
	public long getExpire(K key);
	
	/**
	 * 发送消息
	 * </br>Created on 2016年4月21日
	 * @param channel
	 * @param message
	 * @return
	 */
	public boolean sendMessage(String channel,Serializable message);
	
}